home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / book / src / setup.asm < prev    next >
Assembly Source File  |  1993-07-08  |  4KB  |  137 lines

  1.         page    100, 132
  2.         title   ESR_setupInfo
  3. ;
  4. ;       int     ESR_setupInfo(char *out_buf);
  5. ;
  6. ;       機能
  7. ;               FMR-BIOS拡張サービスルーチン(Int 8EH)
  8. ;                       システム情報の取得(Function 00H)を呼び出す
  9. ;
  10. ;       パラメタ
  11. ;               out_buf : システム情報通知領域(200バイト)へのポインタ
  12. ;
  13. ;       復帰値
  14. ;               0 : 正常終了
  15. ;
  16. ;       アセンブル時には大文字/小文字識別オプション -twocase を指定すること
  17. ;               例      386asm setup -twocase
  18. ;
  19. ;       リンク時にはオプション -callbufs を指定すること
  20. ;               例      386link setup -callbufs 2
  21. ;
  22. ;       参考文献
  23. ;               FM-TOWNSテクニカルデータブック  pp.287~pp.289
  24. ;
  25.         .386p
  26. pmdata  segment dword public use32 'DATA'
  27. pmdata  ends
  28. pmcode  segment byte public use32 'CODE'
  29. pmcode  ends
  30.  
  31.         public  ESR_setupInfo
  32.         
  33.         assume  ds:pmdata
  34. pmdata  segment
  35. rmseg   dd      ?       ; 共有バッファのリアルモード用セグメント
  36. rmoff   dd      ?       ; 共有バッファのリアルモード用オフセット
  37. pmseg   dd      ?       ; 共有バッファのネイティブモード用セグメント
  38. pmoff   dd      ?       ; 共有バッファのネイティブモード用オフセット
  39. pmdata  ends
  40.  
  41.         assume  cs:pmcode
  42. pmcode  segment
  43. ;       db      'ESR_setupInfo',13
  44. ESR_setupInfo   proc    near
  45.  
  46. FUNCTION        equ     00h     ; Function 00H : システム情報の取得
  47. INT_NO          equ     8eh     ; 拡張サービスルーチン
  48. datasize        equ     200     ; 転送するデータのバイト数
  49.  
  50. #out_buf        equ     SS:[ebp+8]      ; C言語I/F第1パラメタアドレス
  51.  
  52.         enter   0, 0
  53.         cld
  54.         push    ds
  55.         push    es
  56.         push    esi
  57.         push    edi
  58.         push    ebx
  59.         push    ecx
  60.         call    mak_buffs               ; 共有バッファを確保
  61.         mov     ah, FUNCTION
  62. ;       mov     al, 入力パラメタ        ; ALへの設定情報は無し
  63.         mov     di, word ptr rmoff      ; DS:DIで通知領域を指定
  64.         push    dword ptr rmseg         ; ES
  65.         push    dword ptr rmseg         ; DS
  66.         push    dword ptr INT_NO
  67.         call    BIOS_call
  68.         add     esp, 12
  69.         mov     ecx, datasize           ; 共有バッファのバイト数をセット
  70.         push    ds
  71.         pop     es
  72.         mov     edi, #out_buf           ; 転送先をセット
  73.         mov     esi, dword ptr pmoff    ; 転送元をセット
  74.         mov     ds, word ptr pmseg
  75. rep     movsb                           ; データを転送
  76.         movzx   eax, ah                 ; BIOSコールの復帰値をAXへセット
  77.         pop     ecx
  78.         pop     ebx
  79.         pop     edi
  80.         pop     esi
  81.         pop     es
  82.         pop     ds
  83.         leave
  84.         ret
  85. ESR_setupInfo   endp
  86.  
  87. mak_buffs       proc    near
  88.         mov     ax, 250dh
  89.         int     21h
  90.         mov     word ptr rmoff, bx
  91.         shr     ebx, 16
  92.         mov     dword ptr rmseg, ebx
  93.         mov     dword ptr pmoff, edx
  94.         mov     ax, es
  95.         mov     word ptr pmseg, ax
  96.         ret
  97. mak_buffs       endp
  98.  
  99. RMINT   struc
  100. RMI_INUM        dw      ?
  101. RMI_DS          dw      ?
  102. RMI_ES          dw      ?
  103. RMI_FS          dw      ?
  104. RMI_GS          dw      ?
  105. RMI_EAX         dd      ?
  106. RMI_EDX         dd      ?
  107. RMINT   ends
  108.  
  109. BIOS_call       proc    near
  110. #INTNO  equ     (word ptr 8[ebp])
  111. #RMDS   equ     (word ptr 12[ebp])
  112. #RMES   equ     (word ptr 16[ebp])
  113. #RMI    equ     (dword ptr [ebp - (size RMINT)])
  114.         enter   0, 0
  115.         sub     esp, size RMINT
  116.         mov     #RMI.RMI_EAX, eax
  117.         mov     #RMI.RMI_EDX, edx
  118.         mov     ax, #RMDS
  119.         mov     #RMI.RMI_DS, ax
  120.         mov     ax, #RMES
  121.         mov     #RMI.RMI_ES, ax
  122.         mov     ax, #INTNO
  123.         mov     #RMI.RMI_INUM, ax
  124.         push    ds
  125.         mov     ax, ss
  126.         mov     ds, ax
  127.         lea     edx, #RMI
  128.         mov     ax, 2511h
  129.         int     21h
  130.         pop     ds
  131.         add     esp, size RMINT
  132.         pop     ebp
  133.         ret
  134. BIOS_call       endp
  135. pmcode  ends
  136.         end
  137.